package com.cskaoyan.day5.map._02_api;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 * @author Common-zhou
 * @since 2023-03-03 15:53
 */
public class Demo3 {
    public static void main(String[] args) {

        //---------------------------视图方法
        //    Set<Map.Entry<K,V>> entrySet()： 返回此映射中包含的映射关系的 Set 视图。
        //    Set<K> keySet()： 返回此映射中包含的键的 Set 视图。
        //    Collection<V> values()： 返回此映射中包含的值的 Collection 视图。

        // Map中使用比较多的一类方法
        // 直接获取一个EntrySet对象，然后遍历这个对象
        // 可以从entry中获取 key value. entry.getKey()  entry.getValue();
        //testEntrySet();

        // Map遍历的第二种方式。
        // 1.获取keySet
        // 2.遍历这个keySet
        //        通过get()得到value
        //testKeySet();

        testValues();

        // 1.通过keySet; 遍历这个keySet，获取到所有的键
        //      通过键，获取value(get())

        // 2.通过entrySet；遍历
        // 拿到entry对象，通过entry对象，getkey() getValue();

    }

    private static void testValues() {
        Map<String, String> map = new HashMap<>();
        map.put("飞哥", "周勇飞");
        map.put("黑娃", "贺子靖");
        map.put("强哥", "gaoqingqiang");

        Collection<String> values = map.values();

        for (String value : values) {
            System.out.println(value);
        }

    }

    private static void testKeySet() {
        Map<String, String> map = new HashMap<>();
        map.put("飞哥", "周勇飞");
        map.put("黑娃", "贺子靖");
        map.put("强哥", "gaoqingqiang");

        // 返回了一个Set
        Set<String> set = map.keySet();

        for (String key : set) {
            System.out.println("key:" + key);

            // 获取到了key，有什么办法获取value?
            String value = map.get(key);
            System.out.println("value:" + value);
            System.out.println("---------------");

        }

    }

    private static void testEntrySet() {

        Map<String, String> map = new HashMap<>();

        map.put("zs", "hubei");
        map.put("ls", "hunan");
        map.put("zl", "hainan");

        // 返回了一个Set
        // Entry里面存储的键值对
        Set<Map.Entry<String, String>> entries = map.entrySet();
        // Set是谁的子接口？  Collection

        for (Map.Entry<String, String> entry : entries) {
            String key = entry.getKey();
            String value = entry.getValue();

            System.out.println(key + "___" + value);
        }


    }
}
